package com.fxu.framework.biz.ano;

import ch.qos.logback.classic.Level;

import java.lang.annotation.*;


/**
 * 设置打印日志级别
 * @author fangxu
 * @since 2025-05-30
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Logger {
    /**
     * 打印日志级别[默认DEBUG]
     * @return 打印日志级别
     */
    FLevel level() default FLevel.INFO;

    /**
     * 打印方法参数
     * @return 是否打印方法参数
     */
    boolean param() default false;

    /**
     * 打印方法返回
     * @return 是否打印方法返回
     */
    boolean back() default false;

    /**
     * 打印方法响应时间
     * @return 是否打印方法响应时间
     */
    boolean time() default false;

    enum FLevel {
        TRACE, DEBUG, INFO, WARN, ERROR;

        public Level toLogbackLevel() {
            switch (this) {
                case TRACE:
                    return Level.TRACE;
                case DEBUG:
                    return Level.DEBUG;
                case WARN:
                    return Level.WARN;
                case ERROR:
                    return Level.ERROR;
                case INFO:
                default:
                    return Level.INFO;
            }
        }
    }
}
